<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article# " lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>creating-sample-data-for-toy-analysis | 绿萝间</title>
<link href="../assets/css/all-nocdn.css" rel="stylesheet" type="text/css">
<link href="../assets/css/ipython.min.css" rel="stylesheet" type="text/css">
<link href="../assets/css/nikola_ipython.css" rel="stylesheet" type="text/css">
<meta name="theme-color" content="#5670d4">
<meta name="generator" content="Nikola (getnikola.com)">
<link rel="alternate" type="application/rss+xml" title="RSS" href="../rss.xml">
<link rel="canonical" href="https://muxuezi.github.io/posts/creating-sample-data-for-toy-analysis.html">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true
    },
    displayAlign: 'center', // Change this to 'center' to center equations.
    "HTML-CSS": {
        styles: {'.MathJax_Display': {"margin": 0}}
    }
});
</script><!--[if lt IE 9]><script src="../assets/js/html5.js"></script><![endif]--><meta name="author" content="Tao Junjie">
<link rel="prev" href="creating-binary-features-through-thresholding.html" title="creating-binary-features-through-thresholding" type="text/html">
<link rel="next" href="decomposition-to-classify-with-dictionarylearning.html" title="decomposition-to-classify-with-dictionarylearning" type="text/html">
<meta property="og:site_name" content="绿萝间">
<meta property="og:title" content="creating-sample-data-for-toy-analysis">
<meta property="og:url" content="https://muxuezi.github.io/posts/creating-sample-data-for-toy-analysis.html">
<meta property="og:description" content="创建试验样本数据¶








希望你在学习本书时用自己的数据来试验，如果实在没有数据，下面就介绍如何用scikit-learn创建一些试验用的样本数据（toy data）。









Getting ready¶








与前面获取内置数据集，获取新数据集的过程类似，创建样本数据集，用make_数据集名称函数。这些数据集都是人造的：






In [1]:

    
f">
<meta property="og:type" content="article">
<meta property="article:published_time" content="2015-07-27T14:57:52+08:00">
<meta property="article:tag" content="CHS">
<meta property="article:tag" content="ipython">
<meta property="article:tag" content="Machine Learning">
<meta property="article:tag" content="Python">
<meta property="article:tag" content="scikit-learn cookbook">
</head>
<body>
<a href="#content" class="sr-only sr-only-focusable">Skip to main content</a>

<!-- Menubar -->

<nav class="navbar navbar-inverse navbar-static-top"><div class="container">
<!-- This keeps the margins nice -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-navbar" aria-controls="bs-navbar" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="https://muxuezi.github.io/">

                <span id="blog-title">绿萝间</span>
            </a>
        </div>
<!-- /.navbar-header -->
        <div class="collapse navbar-collapse" id="bs-navbar" aria-expanded="false">
            <ul class="nav navbar-nav">
<li>
<a href="../archive.html">Archive</a>
                </li>
<li>
<a href="../categories/">Tags</a>
                </li>
<li>
<a href="../rss.xml">RSS feed</a>

                
            </li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
    <a href="creating-sample-data-for-toy-analysis.ipynb" id="sourcelink">Source</a>
    </li>

                
            </ul>
</div>
<!-- /.navbar-collapse -->
    </div>
<!-- /.container -->
</nav><!-- End of Menubar --><div class="container" id="content" role="main">
    <div class="body-content">
        <!--Body content-->
        <div class="row">
            
            
<article class="post-text h-entry hentry postpage" itemscope="itemscope" itemtype="http://schema.org/Article"><header><h1 class="p-name entry-title" itemprop="headline name"><a href="#" class="u-url">creating-sample-data-for-toy-analysis</a></h1>

        <div class="metadata">
            <p class="byline author vcard"><span class="byline-name fn">
                    Tao Junjie
            </span></p>
            <p class="dateline"><a href="#" rel="bookmark"><time class="published dt-published" datetime="2015-07-27T14:57:52+08:00" itemprop="datePublished" title="2015-07-27 14:57">2015-07-27 14:57</time></a></p>
            
        <p class="sourceline"><a href="creating-sample-data-for-toy-analysis.ipynb" id="sourcelink">Source</a></p>

        </div>
        

    </header><div class="e-content entry-content" itemprop="articleBody text">
    <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="创建试验样本数据">创建试验样本数据<a class="anchor-link" href="creating-sample-data-for-toy-analysis.html#%E5%88%9B%E5%BB%BA%E8%AF%95%E9%AA%8C%E6%A0%B7%E6%9C%AC%E6%95%B0%E6%8D%AE">¶</a>
</h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>希望你在学习本书时用自己的数据来试验，如果实在没有数据，下面就介绍如何用scikit-learn创建一些试验用的样本数据（toy data）。</p>
<!-- TEASER_END -->
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Getting-ready">Getting ready<a class="anchor-link" href="creating-sample-data-for-toy-analysis.html#Getting-ready">¶</a>
</h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>与前面获取内置数据集，获取新数据集的过程类似，创建样本数据集，用<code>make_数据集名称</code>函数。这些数据集都是人造的：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn</span> <span class="k">import</span> <span class="n">datasets</span>

datasets.make_*<span class="o">?</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">

<pre><code>datasets.make_biclusters
datasets.make_blobs
datasets.make_checkerboard
datasets.make_circles
datasets.make_classification
datasets.make_friedman1
datasets.make_friedman2
datasets.make_friedman3
datasets.make_gaussian_quantiles
datasets.make_hastie_10_2
datasets.make_low_rank_matrix
datasets.make_moons
datasets.make_multilabel_classification
datasets.make_regression
datasets.make_s_curve
datasets.make_sparse_coded_signal
datasets.make_sparse_spd_matrix
datasets.make_sparse_uncorrelated
datasets.make_spd_matrix
datasets.make_swiss_roll</code></pre>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>为了简便，下面我们用<code>d</code>表示<code>datasets</code>，<code>np</code>表示<code>numpy</code>：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">sklearn.datasets</span> <span class="k">as</span> <span class="nn">d</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="How-to-do-it...">How to do it...<a class="anchor-link" href="creating-sample-data-for-toy-analysis.html#How-to-do-it...">¶</a>
</h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>这一节将带你创建几个数据集；在后面的<em>How it works...</em>一节，我们会检验这些数据集的特性。除了样本数据集，后面还会创建一些具有特定属性的数据集来显示算法的特点。</p>
<p>首先，我们创建回归（regression）数据集：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [2]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">reg_data</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_regression</span><span class="p">()</span>
<span class="n">reg_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span><span class="n">reg_data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt output_prompt">Out[2]:</div>


<div class="output_text output_subarea output_execute_result">
<pre>((100, 100), (100,))</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><code>reg_data</code>默认是一个元组，第一个元素是$100\times100$的矩阵——100个样本，每个样本10个特征（自变量），第二个元素是1个因变量，对应自变量的样本数量，也是100个样本。然而，默认情况下，只有10个特征与因变量的相关（参数<code>n_informative</code>默认值是10），其他90个特征都与。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>可以自定义更复杂的数据集。比如，创建一个$1000\times10$的矩阵，5个特征与因变量相关，误差系数0.2，两个因变量。代码如下所示：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [3]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">complex_reg_data</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_regression</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span>
<span class="n">complex_reg_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span><span class="n">complex_reg_data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt output_prompt">Out[3]:</div>


<div class="output_text output_subarea output_execute_result">
<pre>((1000, 10), (1000, 2))</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>分类数据集也很容易创建。很容易创建一个基本均衡分类集，但是这种情况现实中几乎不可能发生——大多数用户不会改变消费习惯，大多数交易都不是虚假的，等等。因此，创建一个非均衡数据集更有意义：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">classification_set</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_classification</span><span class="p">(</span><span class="n">weights</span><span class="o">=</span><span class="p">[</span><span class="mf">0.1</span><span class="p">])</span>
<span class="n">np</span><span class="o">.</span><span class="n">bincount</span><span class="p">(</span><span class="n">classification_set</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt output_prompt">Out[4]:</div>


<div class="output_text output_subarea output_execute_result">
<pre>array([10, 90], dtype=int64)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>聚类数据集也可以创建。有一些函数可以为不同聚类算法创建对应的数据集。例如，<code>blobs</code>函数可以轻松创建K-Means聚类数据集：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
<span class="kn">import</span> <span class="nn">sklearn.datasets</span> <span class="k">as</span> <span class="nn">d</span>
<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="k">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>

<span class="n">blobs</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">make_blobs</span><span class="p">(</span><span class="mi">200</span><span class="p">)</span>

<span class="n">f</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>

<span class="n">ax</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"A blob with 3 centers"</span><span class="p">)</span>

<span class="n">colors</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="s1">'r'</span><span class="p">,</span> <span class="s1">'g'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">blobs</span><span class="p">[</span><span class="mi">0</span><span class="p">][:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">blobs</span><span class="p">[</span><span class="mi">0</span><span class="p">][:,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="n">colors</span><span class="p">[</span><span class="n">blobs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)],</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.75</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt output_prompt">Out[5]:</div>


<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.collections.PathCollection at 0x88e44e0&gt;</pre>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>


<div class="output_png output_subarea ">
<img src="%0A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">
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="How-it-works...">How it works...<a class="anchor-link" href="creating-sample-data-for-toy-analysis.html#How-it-works...">¶</a>
</h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>下面让我们从源代码看看scikit-learn是如何生成回归数据集的。下面任何未重新定义的参数都使用<code>make_regression</code>函数的默认值。</p>
<p>其实非常简单。首先，函数调用时生成一个指定维度的随机数组。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="n">n_samples</span><span class="p">,</span> <span class="n">n_features</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>对于基本均衡数据集，其目标数据集生成方法是：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [ ]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">ground_truth</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeroes</span><span class="p">((</span><span class="n">np_samples</span><span class="p">,</span> <span class="n">n_target</span><span class="p">))</span>
<span class="n">ground_truth</span><span class="p">[:</span><span class="n">n_informative</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="mi">100</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="n">n_informative</span><span class="p">,</span>
<span class="n">n_targets</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>然后<code>X</code>和<code>ground_truth</code>点积加上<code>bias</code>就得到了<code>y</code>：</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [ ]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">ground_truth</span><span class="p">)</span> <span class="o">+</span> <span class="n">bias</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<blockquote>
<p>点积是一种基本的矩阵运算$A_{m \times n} \cdot B_{n \times s} = C_{m \times s}$。因此，<code>y</code>数据集里面样本数量是<code>n_samples</code>，即数据集的行数，因变量数量是<code>n_target</code>。</p>
</blockquote>
<p>由于Numpy的传播操作（broadcasting），<code>bias</code>虽然是标量，也会被增加到矩阵的每个元素上。增加噪声和数据混洗都很简单。这样试验用的回归数据集就完美了。</p>

</div>
</div>
</div>
    </div>
  </div>

    </div>
    <aside class="postpromonav"><nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="../categories/chs.html" rel="tag">CHS</a></li>
            <li><a class="tag p-category" href="../categories/ipython.html" rel="tag">ipython</a></li>
            <li><a class="tag p-category" href="../categories/machine-learning.html" rel="tag">Machine Learning</a></li>
            <li><a class="tag p-category" href="../categories/python.html" rel="tag">Python</a></li>
            <li><a class="tag p-category" href="../categories/scikit-learn-cookbook.html" rel="tag">scikit-learn cookbook</a></li>
        </ul>
<ul class="pager hidden-print">
<li class="previous">
                <a href="creating-binary-features-through-thresholding.html" rel="prev" title="creating-binary-features-through-thresholding">Previous post</a>
            </li>
            <li class="next">
                <a href="decomposition-to-classify-with-dictionarylearning.html" rel="next" title="decomposition-to-classify-with-dictionarylearning">Next post</a>
            </li>
        </ul></nav></aside><script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> </script><script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true
    },
    displayAlign: 'center', // Change this to 'center' to center equations.
    "HTML-CSS": {
        styles: {'.MathJax_Display': {"margin": 0}}
    }
});
</script></article>
</div>
        <!--End of body content-->

        <footer id="footer">
            Contents © 2017         <a href="mailto:muxuezi@gmail.com">Tao Junjie</a> - Powered by         <a href="https://getnikola.com" rel="nofollow">Nikola</a>         
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0">
<img alt="Creative Commons License BY-NC-SA" style="border-width:0; margin-bottom:12px;" src="http://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png"></a>
            
        </footer>
</div>
</div>


            <script src="../assets/js/all-nocdn.js"></script><script>$('a.image-reference:not(.islink) img:not(.islink)').parent().colorbox({rel:"gal",maxWidth:"100%",maxHeight:"100%",scalePhotos:true});</script><!-- fancy dates --><script>
    moment.locale("en");
    fancydates(0, "YYYY-MM-DD HH:mm");
    </script><!-- end fancy dates --><script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-51330059-1', 'auto');
  ga('send', 'pageview');

</script>
</body>
</html>
